cf-serverd is not a required component. There are people that use nfs, pull direct from version control, and probably a number of various other mechanisms.
There are several benefits that you can take advantage of by using cf-serverd though. cf-serverd has proven to be very efficient with single servers reported to serve thousands of clients. It also allows you to be very selective about the transport and file comparison, you can choose to transfer more sensitive files encrypted. You can choose between different types of hash algorithms, or to use file time when determining if a file needs to be updated. If you want to use cf-runagent to signal a node to run its policy cf-serverd would be required on those nodes so that cf-runagent can communicate with it.
If you have questions I encourage you to checkout the cfengine mailing list hosted on google groups, as it will catch more peoples attention. There is also #cfengine on freenode.