ZenPacks can provide new performance collectors and event monitors. This is a somewhat complex undertaking, so before deciding to write your own daemons make sure that zencommand and a custom DataSource class won't fit your needs (see "Providing DataSource classes" above.) Any file in a ZenPack's daemons directory is symlinked in $ZENHOME/bin when the ZenPack is installed. Also, the zenoss script that controls the core daemons will attempt to manage your daemon too. So a "zenoss start", for example, will attempt to start your daemon as well as the core daemons.
Custom daemons usually subclass ZenHub.PBDaemon.PBDaemon. This class provides the basic framework for communicating with ZenHub. See the section "Writing a Zenoss Performance Collector" for more details.