OK, new idea then...

``` ruby
class Reporter
  attr_reader :formatter_loader

  def initialize(configuration)
    @formatter_loader = Formatters::Loader.new(self)
    yield @formatter_loader if block_given?
  end
end

class Configuration
  def formatter_loader
    (@reporter ||= Reporter.new(self)).formatter_loader
  end

  def reporter
    @repoter ||= Reporter.new(self) do |formatter_loader|
      formatter_loader.setup_default output_stream, deprecation_stream
    end
  end
end
```

I think this preserves the semantics you want but is more explicit/less confusing about the relationship between reporter and formatter loaders.  And really, given that the reporter is just the interface rspec uses to report things to the formatters, I think it makes sense for the reporter to own the formatter loader instance.

On a side note, do you think `setup_default` would be more clear as `setup_default_streams`?