You still need to validate your preconditions in the proxy component. So might as well throw exceptions there.
The place where we do these checks is mostly governed by the 'why is it now allowed'.
I say a good place to put stuff coupled with proxy generation is the proxy component.
These are only preconditions if they prevent Proxy generation or lead to non-deterministic results upon lookup/invocation. For example, if @Remote specifies a class that is not an interface, Proxy component should throw the error.
Adding a validation component to aspectize deployment rules based on available metadata can cover all cases and provide a pluggable mechanism looking forward. Less code in the Containers (EJB3 Core), less code in the Proxy stuff (where some of it doesn't belong).