I would suggest you using Multi_Master I2C. Only the PSoC5 bearing the LCD is a slave. The arbitration will be solved by the masters as stated in the datasheet (I didn't try yet).
That would probably work if one PSoC was handeing the LCD but I forgot to specify that my current setup has the LCD connected with all the PSoCs through the I2C.
The problem is that they all try to send functions to the LCD at the same time. Is there a way to detect if the I2C is busy and make the PSoC wait before sending the functions ?
You just need to send the data to the LCD with a single transaction using I2C_MasterWriteBuf() API.
Please refer the below attached project which give some information on how Multi_Master and slave communication takes place. In this project, Master1 is PSoC 4200 device , Master2 is PSoC 4200 ble device and Slave is PSoC 5LP device. Slave(PSoC 5LP) has LCD interface we can see the Master sent data on LCD. You will get some idea on what actually happens during Multi_Master communication.
When one master is communicating others will wait until completion and starts communicating when their turn comes.