Thanks MikaelH and Aristos for your answers,
I was rather hoping there would be an easier way around this hence my rather open question, but I can see there are too many caveats for it to be a simple answer. My specific problem involved objects containing other objects as Aristos mentioned (I have a composition). However for this specific case I always want to clone the references. The composition is also built exclusively of items with a shared ancestor. So to do it I have taken the method that MikaelH mentioned, included "call parent method", and replaced the "child" references (i.e. the references in the object's attributes) with copies (recursively to ensure all "descendant" references are copies too). Thankfully this does the job 🙂
Here is the top level "DeepCopy.vi":
And the modified MikaelH's method "CopyAttributes.vi" (This method is cloned to all the classes inheriting from TestProfileItem):
Many thanks to both of you for your help on this.