What are you planning on receiving from the server? If you plan on only having one UI then you should create a UIRoot in the editor and keep a reference to that in your code. As you receive details about your UI you could just use NGUI.AddChild to create more objects, as you progress through it you should be keeping track of which object is what so it will be easier to parse through.
GameObject copy = NGUITools.AddChild(parent, prefab);It doesn't add it under UIRoot. It adds it wherever you choose (the 'parent' parameter).