How to ensure data integrity when using I2C with a PIC
If you are having serious data integrity problems with your IIC bus, then you should first look at the hardware to see why data is getting corrupted.  In a properly designed system, NACKs shouldn't happen excecpt for the slave to signal it can't take more data.  NACK to a address byte means you sent the wrong address.  That shouldn't happen unless you are deliberately polling to see what addresses are out there.  NACK to a data byte where NACK isn't used to signal the slave can't take more is either a firmware screwup or due to excessive noise on the SCL line.

Note that ACK doesn't mean a byte was received correctly.  Other than the address byte, it only means that the clock was received correctly.  NACK is pretty useless to check for data corruption because by the time you actually get NACKs due to bus noise, you've got much bigger system-level problems.

Unexpected NACK means something went wrong, but you don't really know what.  It is best to abort the whole message because you don't know how confused the slave is at that point.  Do a stop, then a start before the next message.  That should reset the low level protocol layer of all slaves.  Perhaps you can retry the message once or twice, but most likely you have a higher level problem that therefore needs to be dealt with by higher levels of firmware.