Ну что то подобное писал я. Вот 2 варианта вызова.
fn1=function(a){console.log(1);return 1;}
fn2=function(a){console.log(2,a);return 2;}
fn3=function(a){console.log(3,a);return 3;}
fn4=function(a){console.log(4,a);return 4;}
fn5=function(a){console.log(5,a);}
fn1.next=fn2;
fn2.next=fn3;
fn3.next=fn4;
fn4.next=fn5;
jsl(fn1);
fn1=function(a){console.log(1);return 1;}
fn2=function(a){console.log(a);return a;}
fn3=function(a){console.log(a);return a;}
fn4=function(a){console.log(a);return a;}
fn5=function(a){console.log(a);}
fn1.next=fn2;
fn2.next=fn3;
fn3.next=fn4;
fn4.next=fn5;
jsl(fn1);
Как реализовывал не помню смотрите здесь.
netwixell/jsl.js