We at Bucknell University migrated around 8000 accounts from Zimbra to Google Apps back in 2010/2011. We wrote our own scripts to migrate contacts and re-propose meetings in Google from exported Zimbra ics files. We used imapsync to migrate email.
With imapsync, we were able to use a Zimbra admin password to access the end user's email from the source server. At the time, we needed to temporarily reset the end users password on Google Apps to one that we knew - I don't know if there is a better way to handle that now. Since we were syncing a sha1 hash of the users pw from our AD to Google, we were able to store the sha1 of their pw in an other location in order to switch their Google pw back to the original after their mail finished migrating. They were able to access their gmail account throughout the process because when SSO is setup, the end users google-stored pw is only used for smartphones, imap, and pop. We synced with imapsync in the weeks leading up the transition and then did a final sync during the migration.
We created a transition website to inform end users about specific issues we identified with their Zimbra emails, files, folders (email sizes, bad file/folder names, etc) that would need to be corrected before the migration in order to avoid known problems. Via the website, we allowed students to start their own migrations over a couple of months. We migrated all faculty and staff over a single weekend because we decided that it'd be a nightmare to try and make calendaring work with users split between Zimbra and Google. All users were able to follow the details of their individual migration status via the website.
If you have any more questions, feel free to ask.
-Keelan