After further investigation, it appears that NGUI doesn't like it if you modify the transform hierarchy manually, instead the preferred method is to use AddChild().
So my new plan is to change IScannable's signature to have an AttachToNGUI(GameObject parent) method.
I'm still interested in how others have handled this functionality.