So, the following appears to fix all the order dependencies:

```ruby
require 'spec_helper'

describe Crichton do
  before do
    Crichton.clear_registry
    Crichton.clear_config
  end

  describe '.logger' do
    let(:logger) { double('logger') }

    after do
      Crichton::logger = nil
    end
    
    it 'sets a logger' do
      Crichton.logger = logger
      Crichton.logger.should == logger
    end
    
    context 'without Rails' do
      it 'returns a logger configured to STDOUT by default' do
        ::Logger.stub(:new).with(STDOUT).and_return(logger)
        Crichton::logger.should == logger
      end
    end
    
    context 'with Rails' do
      after do
        Object.send(:remove_const, :Rails)
      end
      
      it 'returns the Rails logger Rails logger by default' do
        rails = double('Rails')
        rails.stub(:logger).and_return(logger) 
        Object.const_set(:Rails, rails)

        Crichton::logger.should == logger
      end
    end
  end
  #...
end
```
Couple other points:
* Use mocks instead of strings like "Something" for objects.
* [Rspec 2.14](http://myronmars.to/n/dev-blog/2013/07/rspec-2-14-is-released) deprecates using `mock` to alias `double` so use double for mock and I will clean up other specs in a future PR.
* There should only be one expectation (should) per example (it), so use stub instead of should receive. This will actually need to change in 2.14 PR as well.