This is a math question, not an NGUI question... But, off the top of my head:
Find the viewport position:
Vector3 pos = gameCamera.WorldToViewportPoint(obj.transform.position);
Figure out if it's in front or behind the camera (if using Unity 4, change "orthographic" to "isOrthographic"):
int isVisible = (gameCamera.orthographic || pos.z > 0f) && (pos.x > 0f && pos.x < 1f && pos.y > 0f && pos.y < 1f) ? 1 : 0;
You can use the "isVisible" flag to hide the widget if it's visible, since you mentioned you needed off-screen indicators. Moving on, clamp the position in visible viewport range:
pos.x = Mathf.Clamp01(pos.x);
pos.y = Mathf.Clamp01(pos.y);
Last step is to transform to the widget coordinates:
pos = uiCamera.ViewportToWorldPoint(pos);
pos = widget.transform.parent.InverseTransformPoint(pos);
pos.z = 0f;
widget.transform.localPosition = pos;
All this code was pretty much copy-paste from NGUI HUDText extension.