I've added checks for each rev, but this fails because of TD* internals, which can easily be fixed. 

TD_Database -getAllRevisionsOfDocumentId returns a TD_RevisionList but the JSON bodies for each of the TD_Revision are empty.
https://github.com/cloudant/CDTDatastore/blob/master/Classes/common/touchdb/TD_Database.m#L790

This can be fixed in two ways. One would be to modify the SQL query and pack the bodies within TD_Database -getAllRevisionsOfDocumentId, or would be to call the TD_Database -getDocumentWithId:revisionId:database within the transaction.
https://github.com/cloudant/CDTDatastore/blob/master/Classes/common/touchdb/TD_Database.m#L701

I'll have to think about the rollback bit since we could get a TDStatus error (need to look more closely at the code to determine this). 

I guess my preference would be to reuse getDocumentWithId:revisionId:database if you don't think making two SQL queries would be a performance issue to consider (I don't think it would...).