What is your problem with discontigous framebuffers? (I assume discontigous refers to the pages the framebuffer is composed of) Sounds to me like you should implement your own fb_mmap and either map it contigous to screen_base or implement your own fb_read/write. In theory you could even have each pixel at a completely different memory location although some userspace wouldn't be happy when it could no longer mmap the framebuffer.
The mmap side is trivial, the problem is that the fb layer default implementations of blits, fills etc only work on a kernel linear frame buffer. And (for example) there is not enough linear stolen memory on some Intel video for a 1080p console on HDMI even though the hardware is perfectly capable of using an HDTV as its monitor. Nor - on a 32bit box- is there enough space to vremap it.
Alan