I think what you're missing before all your vhost containers in the conf file is:
NameVirtualHost *:80
Once you've done that, depending on what you want to do for all those wildcards you deem "invalid" you can create the required <virtualhost>
containers, and then followup with a final one with a wildcard that acts a catchall for the rest.
See http://httpd.apache.org/docs/2.2/vhosts/name-based.html
For instance, what I've done is have a vhost container for myhost.mydomain.tld, and then whatever other domains, and finally, I have a container for *.mydomain.tld that basically points to a static page notifying people to mind their own business.