What do you mean by puppet method? You can have a virtual/empty method in different nodes, but each node will have to have the same method defined unless it extends from a base node that contains the virtual method.
For example:
class_name base_node
extends Node
func _ready():
print_function()
func print_function():
return
Then you can extend this node so all of the nodes have the same functionality:
extends base_node
func print_function():
print ("Test")
# A different node
extends base_node
func print_function():
print ("2nd test")
Finally, you can use the same function name and define the function in multiple nodes, and then use has_method
to check if the function exists. I've done this a few times to make it where a node can work with a variety of nodes that are not necessarily extending the same base class.