I mentioned I posted the code for it before. You can still find it if you search for it, or you can just do math yourself. Knowing the 3D point, use the game camera to transform it to screen space (camera.WorldToScreenPoint). Now knowing the screen space, use the UI camera to transform that position to world space (camera.ScreenToWorldPoint). Now inverse transform this position to be relative to the panel you want it to be a child of (panelTransform.InverseTransformPoint). Last step is to set the widget's transform.localPosition to that value.
It's all math, all Unity, and not really an NGUI question, but there you go.