Still kind of digesting what you are trying to do, but noticed that you do have a typo where you have i(1)
instead of i[1]
in the typeof
check in your binding handler:
if(!bC.$data[i[0]]().hasOwnProperty(i[1]) || typeof bC.$data[i[0]]()[i(1)] !== 'function'){
var existing = bC.$data[i[0]]();