Report for Unbatched Contributions
I found the solution by changing two lines of PHP for the Contribution Detail report (CRM\Report\Form\Contribute\Detail.php) and putting it in our Custom PHP directory.

The filters section for the batch name field reads by default (Civi 4.6.20) as follows:

  $this-&gt;_columns['civicrm_batch']['filters']['bid'] = array(
    'name' =&gt; 'id',
    'title' =&gt; ts('Batch Name'),
    'type' =&gt; CRM_Utils_Type::T_INT,
    'operatorType' =&gt; CRM_Report_Form::OP_MULTISELECT,
    'options' =&gt; $this-&gt;_allBatches,
  );


By changing the operator type and commenting out the options, I was able to get a widget with an "Is empty (Null)" option (thanks to the wiki, I knew to look in CRM_Report_Form for the possible values.)  My code now reads:

  $this-&gt;_columns['civicrm_batch']['filters']['bid'] = array(
    'name' =&gt; 'id',
    'title' =&gt; ts('Batch Name'),
    'type' =&gt; CRM_Utils_Type::T_INT,
    'operatorType' =&gt; CRM_Report_Form::OP_INT,
    //'options' =&gt; $this-&gt;_allBatches,
  );