diff --git a/zine/forms.py b/zine/forms.py
--- a/zine/forms.py
+++ b/zine/forms.py
@@ -10,6 +10,7 @@
 """
 from copy import copy
 from datetime import datetime
+from itertools import chain
 import os
 
 from zine.i18n import _, lazy_gettext, list_languages
@@ -155,7 +156,31 @@
         is not a post req or the form is invalid the return value is None,
         otherwise a redirect response to the new comment.
         """
-        if req.method != 'POST' or not self.validate(req.form):
+        if req.method != 'POST':
+            return
+
+        valid = self.validate(req.form)
+        errors = emit_event('before-comment-created', req)
+
+        # event handler returns 'True' to signal field-specific error
+        field_errors = filter(lambda x: isinstance(x, bool) and x, errors)
+        valid = valid and (len(field_errors) == 0)
+
+        # event handler returns a list or a tuple of error string to
+        # signal form-wide errors
+        errors = filter(lambda x: not isinstance(x, bool) and \
+                                  x is not None, errors)
+        errors = list(chain(*errors))
+
+        if len(errors) > 0:
+            # update the form-wide error list with those added by the
+            # event handlers
+            error_list = self.errors.get(None, forms.ErrorList())
+            error_list.extend(errors)
+            self.errors[None] = error_list
+            return
+
+        if not valid:
             return
 
         # if we don't have errors let's save it and emit an
diff --git a/zine/views/blog.py b/zine/views/blog.py
--- a/zine/views/blog.py
+++ b/zine/views/blog.py
@@ -238,7 +238,11 @@
         `before-comment-created`:
             this event is sent with the form as event data. Can return
             a list of error messages to prevent the user from posting
-            that comment.
+            that comment. Returning `True` will also prevent the comment
+            from being posted, but will not display as a form-wide error.
+            This is useful, for example, for plugins that inject a field
+            to the "new comment" form and will display a validation error
+            message along with that field.
 
         `before-comment-saved`:
             executed right before the comment is saved to the database.

