You could turn up the level of tracing on a few of the misbehaving clients. You should at least get when the last message came in and what method was called last. That should at least get you to the right place to look in the code. Also are you monitoring your heart beats? Do you stop getting those too? You could try refreshing your connection when you haven't gotten any messages for an extended time. I would also open a TAC case to get some help from Cisco. Its a starting point at least
I some how missed this message of you. Yes as you suggested i did turn up the tracing and this is what I got, We have disabled the chat button from the GUI I am not sure how this chatform is responding to the event. However The same chatform.onevent was recieved several times in the log but the connection closed only once . I am not able to recreate this issue with out of box so i think TAC will not help me here

4/06/2011 11:51:33.5317 GridHelper.ArgsToRow: row[15] set to 0
04/06/2011 11:51:33.5317 GridHelper.FmtArg: Returning 40 for HandledCallsToday
04/06/2011 11:51:33.5317 GridHelper.ArgsToRow: Found 40 for HandledCallsToday
04/06/2011 11:51:33.5317 GridHelper.ArgsToRow: row[16] set to 40
04/06/2011 11:51:33.5317 GridHelper.FmtArg: Returning 05:00:12 for HandledCallsTalkTimeToday
04/06/2011 11:51:33.5317 GridHelper.ArgsToRow: Found 05:00:12 for HandledCallsTalkTimeToday
04/06/2011 11:51:33.5317 GridHelper.ArgsToRow: row[17] set to 05:00:12
04/06/2011 11:51:33.5317 CtiOsGrid.doUpdateRow: Grid has 1 rows after update
04/06/2011 11:51:33.5317 StatsForm.CheckSGs: SG Info: ID: skillgroup.5010.30246 TO: 300000000 prevUpd: 634376874935317266
04/06/2011 11:51:33.5317 ChatForm.OnEvent: Processing event 53687102704/06/2011 12:34:37.3940 CTIObject.SetAgentState: Calling SetAgentState()
Arguments: (AgentState:eNotReady)
04/06/2011 12:34:37.4096 [agent.5010.11111].SetAgentState( eNotReady )
04/06/2011 12:34:37.4096 [agent.5010.11111].SetAgentState: (AgentState:eNotReady)