I checked your code and found following error at:
You need change model in <customshippingmethod> tag from <model>shipping/carrier_customshippingmethod</model> to <model>shippingmethod/customshipping</model>
Explanation: model name and path is wrong and it should be [...
In Back-end, there is one option available to show error message. You just need to enable this setting there "Show Method if Not Applicable".
You do not need to add any custom code. Just follow "Bank Transfer" or any other default Magento Shipping method modules and you can add that functionality for your custom shipping methods as well.
You need to check ...
By default, free shipping still forces you to enter an address - which could be confusing. Is there a way to prevent having to have that extra step for customers to fill in the address field (or choose a shipping cost even though it's $0)