### Godot version

4.2 247c354

### System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)

### Issue description

#75778 exposed `_validate_property()` to scripting. It's implemented in GDScript and C#, but not GDExtension (depends on #78634).
https://github.com/godotengine/godot/blob/247c3548d810136ffe9c1694cd76db3236efaa90/core/object/script_language_extension.h#L685-L687

Relevant discussion: https://github.com/godotengine/godot/pull/75778#discussion_r1307294940

### Steps to reproduce

1. Add GDExtension script
2. Use `_validate_property()`

### Minimal reproduction project

N/A
list)
	virtual void get_script_property_list(List<PropertyInfo> *r_propertys) const override {
		TypedArray<Dictionary> sl;
		GDVIRTUAL_REQUIRED_CALL(_get_script_property_list, sl);
		for (int i = 0; i < sl.size(); i++) {
			r_propertys->push_back(PropertyInfo::from_dict(sl[i]));
		}
	}
	EXBIND1RC(int, get_member_line, const StringName &)
	GDVIRTUAL0RC(Dictionary, _get_constants)
	virtual void get_constants(HashMap<StringName, Variant> *p_constants) override {
		Dictionary constants;
		GDVIRTUAL_REQUIRED_CALL(_get_constants, constants);
		List<Variant> keys;
		constants.get_key_list(&keys);
		for (const Variant &K : keys) {
			p_constants->insert(K, constants[K]);
		}
	}
	GDVIRTUAL0RC(TypedArray<StringName>, _get_members)
	virtual void get_members(HashSet<StringName> *p_members) override {
		TypedArray<StringName> members;
		GDVIRTUAL_REQUIRED_CALL(_get_members, members);
		for (int i = 0; i < members.size(); i++) {
			p_members->insert(members[i]);
		}
	}
	EXBIND0RC(bool, is_placeholder_fallback_enabled)
	GDVIRTUAL0RC(Variant, _get_rpc_config)
	virtual const Variant get_rpc_config() const override {
		Variant ret;
		GDVIRTUAL_REQUIRED_CALL(_get_rpc_config, ret);
		return ret;
	}
	ScriptExtension() {}
};
typedef ScriptLanguage::ProfilingInfo ScriptLanguageExtensionProfilingInfo;
GDVIRTUAL_NATIVE_PTR(ScriptLanguageExtensionProfilingInfo)
class ScriptLanguageExtension : public ScriptLanguage {
	GDCLASS(ScriptLanguageExtension, ScriptLanguage)
protected:
	static void _bind_methods();
public:
	EXBIND0RC(String, get_name)
	EXBIND0(init)
	EXBIND0RC(String, get_type)
	EXBIND0RC(String, get_extension)
	EXBIND0(finish)
	
	GDVIRTUAL0RC(Vector<String>, _get_reserved_words)
	virtual void get_reserved_words(List<String> *p_words) const override {
		Vector<String> ret;
		GDVIRTUAL_REQUIRED_CALL(_get_reserved_words, ret);
		for (int i = 0; i < ret.size(); i++) {
			p_words->push_back(ret[i]);
		}
	}
	EXBIND1RC(bool, is_control_flow_keyword, String)
	GDVIRTUAL0RC(Vector<String>, _g