Thanks for responding @DJPercy but I'm not sure that's what the OP is asking for.
I think the OP wants more like a class that is on the same level of the built-in classes.
You can do this with "class_name". Here is a simple example:
Animal.gd
extends Node2D
class_name Animal
var sound = "Grrr"
func speak():
print(sound)
Dog.gd:
extends Animal
class_name Dog
func _ready():
sound = "Roof"
Main root node (parent of Dog node):
extends Node2D
onready var dog = get_node("Dog")
func _ready():
dog.speak()
You see you can search for both Animal and Dog in the new node screen and that you don't need any hard-coded path names. Hope that helps.