I have uploaded the patch for semi-sync replication with MySQL 5.0.37 at http://code.google.com/p/google-mysql-tools. It is in the Source section (here) and there is some documentation on the wiki. There is not much documentation at this time. I would like to get some feedback from power users before making this easier to use. I am also still trying this out.
This only works with InnoDB, but can easily be extended to other storage engines.
There are many interesting features that can be added to it. The HA feature from Solid as described at the MySQL Conference supports different levels of durability and these determine when the slave acknowledges receipt of replication events. This implementation ACKs receipt as soon as the IO thread receives them, which is before the IO thread buffers them. With not much effort, there could be options that delay the ACK until the IO thread has written the relay log or forced the relay log to disk.
More complex commit protocols can be implemented. Currently, the master calls commit on a storage engine, and then blocks return from a successful commit until at least one slave ACKs receipt or the timeout expires. I am sure that you can think of options to make this more interesting.