### Godot version

4.1.3

### System information

Linux

### Issue description

I'm trying to make an editor plugin on Rust:

```rust
#[derive(GodotClass)]
#[class(tool, editor_plugin, init, base=EditorPlugin)]
pub struct MyEditorPluginBase {}
```

But due to some limitations, I still have to use GDScript for some specific things.

So I tried to make a subclass of this Rust class:

```gdscript
@tool
class_name MyEditorPlugin
extends MyEditorPluginBase
```

This would work if `MyEditorPluginBase` was a GDScript class, but since it's a GDExtension class in my case, it doesn't work:

> Unable to load addon script from path: 'res://addons/my_addon/my_editor_plugin.gd' Base type is not EditorPlugin.

But it obviously **IS** EditorPlugin!

![godot-editorplugin-docs](https://github.com/godotengine/godot/assets/3236464/4665deeb-30f0-45cd-bfff-56101b9d4875)

![godot-editorplugin](https://github.com/godotengine/godot/assets/3236464/b1b6ecb4-de22-4abd-91a3-e180691f67ee)

If I understand correctly, this behavior is caused by this function, which checks some mysterious "instance base type" instead of real inheritance:

https://github.com/godotengine/godot/blob/fa4a65387ea41506ecc519fc61a06da110dce51c/editor/editor_node.cpp#L3456-L3458

https://github.com/godotengine/godot/blob/fa4a65387ea41506ecc519fc61a06da110dce51c/modules/gdscript/gdscript.cpp#L260-L263

Since the [documentation](https://docs.godotengine.org/en/stable/tutorials/plugins/editor/making_plugins.html#the-script-file) doesn't say that the script must be a **direct** subclass of EditorPlugin (and an indirect subclass works fine in GDScript), I interpret this behavior as a Godot bug.

### Steps to reproduce

See above

### Minimal reproduction project

[gdext_editor_plugin_test.zip](https://github.com/godotengine/godot/files/13451014/gdext_editor_plugin_test.zip)
singleton->editor_folding.load_resource_folding(p_resource, p_path);
}
void EditorNode::_feature_profile_changed() {
	Ref<EditorFeatureProfile> profile = feature_profile_manager->get_current_profile();
	TabContainer *import_tabs = cast_to<TabContainer>(ImportDock::get_singleton()->get_parent());
	TabContainer *node_tabs = cast_to<TabContainer>(NodeDock::get_singleton()->get_parent());
	TabContainer *fs_tabs = cast_to<TabContainer>(FileSystemDock::get_singleton()->get_parent());
	TabContainer *history_tabs = cast_to<TabContainer>(history_dock->get_parent());
	if (profile.is_valid()) {
		node_tabs->set_tab_hidden(node_tabs->get_tab_idx_from_control(NodeDock::get_singleton()), profile->is_feature_disabled(EditorFeatureProfile::FEATURE_NODE_DOCK));
		
		bool fs_dock_disabled = profile->is_feature_disabled(EditorFeatureProfile::FEATURE_FILESYSTEM_DOCK);
		fs_tabs->set_tab_hidden(fs_tabs->get_tab_idx_from_control(FileSystemDock::get_singleton()), fs_dock_disabled);
		import_tabs->set_tab_hidden(import_tabs->get_tab_idx_from_control(ImportDock::get_singleton()), fs_dock_disabled || profile->is_feature_disabled(EditorFeatureProfile::FEATURE_IMPORT_DOCK));
		history_tabs->set_tab_hidden(history_tabs->get_tab_idx_from_control(history_dock), profile->is_feature_disabled(EditorFeatureProfile::FEATURE_HISTORY_DOCK));
		main_editor_buttons[EDITOR_3D]->set_visible(!profile->is_feature_disabled(EditorFeatureProfile::FEATURE_3D));
		main_editor_buttons[EDITOR_SCRIPT]->set_visible(!profile->is_feature_disabled(EditorFeatureProfile::FEATURE_SCRIPT));
		if (AssetLibraryEditorPlugin::is_available()) {
			main_editor_buttons[EDITOR_ASSETLIB]->set_visible(!profile->is_feature_disabled(EditorFeatureProfile::FEATURE_ASSET_LIB));
		}
		if ((profile->is_feature_disabled(EditorFeatureProfile::FEATURE_3D) && singleton->main_editor_buttons[EDITOR_3D]->is_pressed()) ||
				(profile->is_feature_disabled(EditorFeatureProfile::FEATURE_SCRIPT) && singleton->main_editor_buttons[EDITOR_SCRIPT]->is_pressed()) ||
				(AssetLibraryEditorPlugin::is_available() && profile->is_feature_disabled(EditorFeatureProfile::FEATURE_ASSET_LIB) && singleton->main_editor_buttons[EDITOR_ASSETLIB]->is_pressed())) {
			editor_select(EDITOR_2D);
		}