The CallerInfo sample is exactly the place you should be looking at. Depending on how the call came in there are various elements you can get:
caller ID
whether or not the call was redirected and the last redirected number
the name of the caller (provided it's an internal caller)
What you cannot see is the time the call came on your external gateway, or how many time the call was bounced around (e.g. A is called, A has an overflow to B, B an overflow to C, C an overflow after time to D, etc.).
But.. you could track that with an application.. each call has a unique ID, so you'd see the call coming to A first, then to B, then to C and then to D (unless there's an immediate redirect.. the call is never routed to A if A has an immediate redirect to B).
Now I'm not sure what exactly you need. You wrote "pull information based on the caller id" which seems to be the inverse way to go at it. A caller with number X may call different people in your organization.. the normal way do to CTI is that you have a listener on a number of phones, and then when something happens on the phone, you trigger a certain action.
There's another approach, but it also is phone based: at some time X you ask the question "what is going on on the phone X".. so you get the phone via JTAPI, and list all calls on the device.
What is your question now? At time X do you ask "who is X calling"? That seems a rather weird approach to me - not that it's not possible, it's just complex because it goes the wrong way around - you don't start with the time you see a call on the phone, but at some random point in time.