Agreed. You should specify the different conditions under which the
method returns nil or an array in distinct examples. For example,
Array#reject! behaves this way. I'd write some examples like:

describe Array, "#reject!" do
  before(:each) do
    @letters = %w[b c d]
  end

  it "returns nil if no changes were made" do
    @letters.reject! { |letter| letter < 'b' }.should be_nil
  end

  it "returns an array of values remaining after ones matching the
given criteria are rejected" do
   @letters.reject! { |letter| letter > 'b' }.should == ['b']
  end
end

By the way, the RSpec lists [ http://rubyforge.org/mail/?group_id=797
] would be a good place to discuss custom matchers.

Regards,
Craig