Hola!
Por lo que veo esa funcion es para poder leer un dato desde una eeprom externa; y para ello se comunica via interface serial SPI (MOSI, MISO, CLK y /SS).
Generalmente para leer un dato via SPI lo que se hace es escribir un dato "dummy" que no sirve para nada, en este caso (0) para arrancar la señal de CLK en el PIC (Master), ya que esta interface es full duplex, osea mientras se envia un dato desde el Master hacia el Slave se esta recibiendo un dato desde el Slave hacia el Master, en el mismo momento.
Pero para que toda comunicacion se comience es necesario que la comience el Master colocando un dato en la pata MOSI del PIC para que arranque el CLK.
Cuando quiero escribir un dato sobre un periferico: escribo la direccion y la envio (se arranca el CLK), luego escribo el dato y lo envio (se arranca el CLK).
Cuando quiero leer un dato desde un periferico: escribo la direccion y la envio (se arranca el CLK), luego escribo un dato "dummy" seria el (0) o cualquier cosa y lo envio (se arranca el CLK), despues solo me queda leer el dato que recibi.
Conclusion: read(0) lo que hace es mandar un cero por pin MOSI para activar la señal CLK de la SPI y poder recibir un dato desde el SLAVE por pin MISO.
Espero que lo entiendas!
PD:
MOSI = Master Out Slave In
MISO = Master In Slave Out
CLK = señal de reloj