I saw http://forums.gradle.org/gradle/topics/how_to_define_a_task_without_outputs and consider your answer counter-intuitive. There are many cases where you define a task checking correctness of some source files (for example, a fast check that an XML file has all tags closed, or that line endings are in Unix format). There is no sense for those kind of tasks to produce any output.
If you choose to retain this behaviour, please at least print a warning when a task has some inputs but no outputs. I think you should also clearly describe how outputs behave in the user guide (http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks) - currently the chapter ‘Skipping tasks that are up-to-date’ offers no help and you can waste lots of time trying to figure out why your task is never skipped.