I think there's a simpler implementation that can do away with the extra methods necessitated by your solution here (and also with the slightly non-standard use of procs here).

``` ruby
def disable_monkey_patching!
  self.expose_dsl_globally = false
  @monkey_patching_disabled = true
  conditionally_disable_mocks_monkey_patching
  conditionally_disable_expectations_monkey_patching
end

def configure_mock_framework
  # ...whatever code was in this method before
  conditionally_disable_mocks_monkey_patching
end

def configure_expectation_framework
  # ...whatever code was in this method before
  conditionally_disable_expectations_monkey_patching
end

private

# These methods are idempotent and are always safe to call as they will do "the right thing"
def conditionally_disable_mocks_monkey_patching
  return unless @monkey_patching_disabled && defined?(RSpec::Mocks)

  RSpec::Mocks.configure do |config|
    config.syntax = :expect
    config.patch_marshal_to_support_partial_doubles = false
  end
end

def conditionally_disable_expectations_monkey_patching
  return unless @monkey_patching_disabled && defined?(RSpec::Expectations)

  RSpec::Expectations.configuration.syntax = :expect
end
```

Thoughts?

BTW, notice that my version conditionally does it based on if `RSpec::Mocks` or `RSpec::Expectations` are defined rather than based on the config settings.  I think this is important, because if the user requires one of those gems manually but then doesn't configure them (or even configures rspec to use a different mocking library or expectation library) we should still disable the monkey patching they do since they're part of RSpec.