Thanks folks. All good advice. I'll give this some more thought and come up with my own little set of rules to cover different types of objects.
I've currently got a LOT of code in the locations{} block. This works well for static objects and you don't have to remember to have an is_at "room" test. I had been using a lot of non-objects to account for nouns in descriptions, but if you try to get one of these non-objects, Adventuron tells you it's not there, even though it's staring you in the face. Therefore, I've been steering towards scenery with conspicuous = "false". This means you have a lot more objects, but at least Adventuron says "You can't get that." rather then "It's not here." The downside is that you can end up with lots of duplicate objects or multiple is_at tests or you have to implement floating objects and use is_present. There are pros and cons for all these techniques.