I've added in a functional Pokedex to my Pokemon Red recreation. The mechanics are relatively simple, but it still took ~31,000 command blocks to implement (generated with an Excel spreadsheet, imported with MCEdit). Here's what's happening:
There are two layers - the background and the text. The background is comprised of maps in item frames. On the Pokedex list, this background never changes. For each of the Pokemon pages, the 16 maps comprising the Pokemon's image change for each page, with the rest remaining static.
The text layer is a series of retextured blocks on the heads of armor stands (this will change to diamond sword damage values in 1.9 - hurray for damage value-based textures!). For the scrolling list, each armor stand has a displayID value that corresponds to a block type (e.g., letter/number/symbol). These values are transferred between armor stands as you scroll through. The Pokemon pages just use a direct /replaceitem command to place the text blocks, instead of using a scoreboard (they don't need to dynamically scroll, so I can get away with this).
I displayed a fully complete Pokedex for testing purposes, but both the list and Pokemon descriptions support seen-only Pokemon (no pokeball in list, no description in profile) and unseen Pokemon (name listed as "----------" in list, inaccessible profile).
There are still a few improvements to make:
Let me know if you have any questions!