The behaviour Brooklyn follows about locations is that the owner of the location (the one who created it) is responsible for unmanaging it. This falls short when the location is created as part of a CAMP blueprint or an EntitySpec because there's no clear owner in this case. I've created a PR [1] that illustrates the problem. What happens is that any location created in a blueprint gets to stay around after the application is unmanaged.
The fix I suggest (and currently working on) is to tag the locations that are created by the runtime as part of EntitySpec instantiation. When unmanaging entities that have tagged locations to destroy the locations as well. The downside is that tagged locations should not be shared between entities except through the parent-child relation. If there's actual need for sharing a location between entities the user would have custom java code anyway and will be able to manage the location himself. Svet. [1] https://github.com/apache/brooklyn-server/pull/148