I think this is really a poor server implementation, but it might be related to the way PS initiates group chats. I have debug logs, but am not sure if I can release them. It would be much easier if you can reproduce.
Steps to reproduce:
1. Start pidgin
2. Log into a Lync server
3. Join a group chat room
4. Send a message to the chat
5. Kill -9 pigdin
6. Restart pidgin
7. Log into the same Lync server as in (2)
8. Join the same group chat room as in (3)
9. Send a message to the chat
10. Notice two copies of the message
In the debug log you should see that you received two SIPE INFO messages from server, both addressed to your client but with DIFFERENT SIPE Call-IDs. One Call-ID will be from the new session, the other will be from the original.
Every subsequent kill (or crash/power loss, etc) adds another call. Forcing the client to use a new port doesn't help, as it seems like there is server side tracking of the calls.
I think either PS needs to negotiate something differently at login, close pre-existing calls, or at the very least, deduplicate the messages.