The company I work for provide a free extension to implement a common B2B requirements in a Magento shop (this is not a plug but a cry for help honest). The request has come in to provide a system config option to remove the Add to cart button, sounds simple enough as we already do this for other items such as price and cart links.
Let me explain a little bit of how I have tried to solve this so far.
We have provided the user with the option via the admin section including config options as to how to identify there Add to cart button. This defaults to the magento standard template information but should allow for different themes
You can select the type of html element (div/a/button etc.)
You can select to to identify by id or class
You can enter the value of the id or class
Then using an observer on the event core_block_abstract_to_html_after and block Mage_Catalog_Block_Product_List (we do check more blocks) we build a regular expression which gets run over the html and replaces the button with some helpful text.
This works "well", but the problem I have is that our module can be activated on a category level. Obviously this means that you could have a search result page with both active and inactive categories. Currently our approach will just remove all Add to cart buttons in this block even on active products as it can not check on a product basis.
Our module code can be found at https://github.com/sitewards/B2BProfessional/tree/add-to-cart if you want to take a quick look. I am happy to answer more questions if people have any suggestions.