The bond you appear to be talking about is an internal bonding of interfaces. Correct me if I'm wrong but I believe the Linux bonding driver can only be used on the physical interfaces on the device. ie bond interfaces eth0 and eth1.
From what you are saying, you want to bond 4 external routers/modems. From what I understand bonding 4 separate connections can't be done if your ISP isn't allowing it. The ISP if using cisco kit would need to config something like multilink. In this instance you would set your default route to the ISP's router that you connect to, not the individual address the ISP provide.
Even then, 4 external modems, if the ISP was accepting GRE tunnels, then you could tunnel from your Linux device. I honestly don't know how that'd work with broadband. Each line would have a slightly different speed going up and down; so packets would arrive out of order. With windowing and other layer 3 features would much of this traffic get dropped and slow you to single line speed?
The other approach is to do what router guys call load balancing (not be confused with server load balancing - similar concept, different execution/hardware), you don't have a default route, but route certain traffic to certain destinations. With statics this can be very simple, eg:
Code:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 192.168.1.1 255.255.255.0 UG 0 0 0 eth1
Although more frequently this would be done dynamically, usually round-robin sharing connectivity. Some more advanced devices will look at usage and load the lines on available bandwidth.
EDIT: For clarity - the bond won't work becuase it's going to be layer 3 routing that causes you problems when you try and route this across the internet. You'd be transmitting packets to the same destination from different source addresses. with TCP/IP it ain't gonna work.