なにー!せっかく考えたから送る

def empty_binding
  binding
end

def marged_binding(*bindings)
  dst = empty_binding
  bindings.each do |src|
    eval("local_variables",src).each do |var|
      id = eval(var, src).id
      eval("#{var} = ObjectSpace._id2ref(#{id})", dst)
    end
  end
  dst
end

def f0
  aa = 111                     #0
  return binding
end

def f1(bb, expr, a_bind)       #1
  cc = 222                     #2
  eval expr, marged_binding(binding, a_bind)
end
f1(333, "p aa, bb, cc", f0)    #4