I accomplish this now by faking DNS zones of ad providers in ZS integrated DNS, and having client PCs use ZS as their DNS server. Or in an Active Directory environment, using the ZS DNS as a forwarder from the domain controllers’ DNS services. ZS DNS itself uses real DNS servers as forwarders.
All I do is create a new DNS zone representing the ad network domain I want to block, and specify a fake contact e-mail address in the SOA, such as “dummy.invalid.” (.invalid is a real DNS zone but queries to it go to servers that eat them.) Subsequent queries to records in that domain will return NXDOMAIN (not found).
My own list has become rather extensive after a few months of use. Generating it was a matter of using the ZS captive portal and logging requests coming from my test client.
I’m not a fan of denying ad revenue to deserving sites, but ad networks that publish ads with hidden payloads, obtrusive, “you have an virus” dialogue boxes, and such get well-deserved scorn and a well-earned place in my list.