Is there any plugin for distributed SCMs that forbids pushing code that doesn't fulfil a certain criteria (e.g. min test coverage)?
You can do this with a pre-commit/pre-changeset hook.
The hgrc Man Page has some info. Probably better is the hg book section on hooks.
In mercurial, you'll want to use hooks. Use a controlling hook on the server side, pretxnchangegroup
most likely. Here's a good example of a hook that prevents someone from doing a push that creates multiple heads: http://hg.netbeans.org/nb-hooks/file/tip/forbid_2head.py
http://progit.org/book/ch7-3.html states that for server-side checking you could use update hook. Other source of hook documentation: http://book.git-scm.com/5_git_hooks.html.
You should place hooks in your central main repository of course.
Both current answers address Mercurial; with git, there are also hooks, and you will want either the pre-receive or update hook. See the githooks man page for information.
Be careful using them to check for things like test coverage, though - you don't want the user to have to wait for time-consuming tests to run while attempting to push.