I noticed that some plug-ins that have their repository host set as custom seem to have their zips treated differently.  For example, some plug-ins I have downloaded, the editor seems to ignore the base folders and just dump the contents into the project's root.  However, ones that have, say, Github listed as the repository host with a commit hash to get the zips, those unzip correctly.

In both cases, the editor seems to see the folders.  It just doesn't install correctly for some reason.  Not sure if this is intended, a bug, or what.
#ifndef EDITOR_ASSET_INSTALLER_H
#define EDITOR_ASSET_INSTALLER_H
#include "scene/gui/dialogs.h"
#include "scene/gui/tree.h"
class EditorAssetInstaller : public ConfirmationDialog {
	GDCLASS(EditorAssetInstaller, ConfirmationDialog);
	Tree *tree = nullptr;
	Label *asset_contents = nullptr;
	String package_path;
	String asset_name;
	AcceptDialog *error = nullptr;
	HashMap<String, TreeItem *> status_map;
	bool updating = false;
	void _item_edited();
	void _check_propagated_to_item(Object *p_obj, int column);
	virtual void ok_pressed() override;
protected:
	static void _bind_methods();
public:
	void open(const String &p_path, int p_depth = 0);
	void set_asset_name(const String &p_asset_name);
	String get_asset_name() const;
	EditorAssetInstaller();
};
#endif