To keep sharing of nodes (DEF/USE mechanism) within the newly created copy, we need a list of already duplicated children. This method uses and updates such list. When called for the first time with OriginalNode, it actually creates a duplicate (by OriginalNode.DeepCopy). Next time, it will just return this copy.