The question was how to disable drop in some rooms. If the code was implemented in a location handler (hence the absence of is_at) , it would say "You can't do that", then it would go ahead and do it anyway, hence the need for :done; to prevent the drop taking place.
I missed the implication behind the last paragraph, but the same reasoning applies. If you tried to DROP ALL, you would get multiple "You can't do that" messages, but the items would still be dropped, so you still need the :done; to prevent the items being dropped.