We do #3 (screen pop) in CIC 2.4 using the ClientCOM API. We have a custom C#.NET application on each agent's desktop. It receives the constituent ID from the server (stored in a custom call attribute by a custom handler using a sproc DB lookup), and the C#.NET app pops our custom CRM (not Sugar CRM but same idea).
In CIC 3.0, I3 is depreciating ClientCOM in favor of IceLib.