node.duplicate() seems not to be sufficient.
You can try something a bit more direct, like duplicate the node, and loop through the properties of the source node and copy them into the new node. In this example I have here, I choose only the ones that are user made in script.
var new_node = source_node.duplicate()
for property in source_node.get_property_list():
# Script only properties/vars
if(property.usage == PROPERTY_USAGE_SCRIPT_VARIABLE):
new_node[property.name] = source_node[property.name]