This works and is a bit less hacky IMO

``` ruby
diff --git a/activerecord/lib/active_record/scoping/named.rb b/activerecord/lib/active_record/scoping/named.rb
index d1580a1..5388012 100644
--- a/activerecord/lib/active_record/scoping/named.rb
+++ b/activerecord/lib/active_record/scoping/named.rb
@@ -159,14 +159,18 @@ module ActiveRecord
           end
 
           singleton_class.send(:define_method, name) do |*args|
-            scope = if body.respond_to?(:call)
-                      if scoped = extension ? body.call(*args).extending(extension) : body.call(*args)
-                        scoped.where_values += self.send(:relation).where_values
-                      end
-                      scoped
-                    else
-                      body
-                    end
+            if body.respond_to?(:call)
+              scope = extension ? body.call(*args).extending(extension) : body.call(*args)
+
+              if scope
+                default_scoped = scope.default_scoped
+
+                scope = relation.merge(scope)
+                scope.default_scoped = default_scoped
+              end
+            else
+              scope = body
+            end
 
             scope || all
           end
```

I think this patch may cause failures in activerecord-deprecated_finders though, when somebody does:

``` ruby
scope :foo, conditions: { ... }
```

Could you take a look? Either way that functionality looks to be broken by this so we need to test it somewhere.