Yeah Im using Diodes to stop what I believe is called ghosting on my button matrix
For your keyboard you will
have to continue to use diodes. It's the only way to prevent ghosting & jamming.
I once saw a piece of code that scanned all the buttons and stored their current states to an array so that the user could use them
Well now, it seems you have stumbled upon my secret method.

I've already provided three people with a multi-key solution but I asked if they could keep it under wraps until I had time to clean up the code (a.k.a. make big changes). I think it was two pc and one midi keyboard.
I cant see a way you would do it without storing all the buttons current state to an array for the user to use?
Absolutely. I created a list that can store up to 10 active KeyCodes. If I recall my research midi requires 10 simultaneous keypresses.
[Snip]... so what would you guys do? create an array the size of the number of keys of type boolean, then scan all the inputs (of the button array) for high/low (true/false) and store the state to the array then cycle through the array checking for true or false to make the sounds?
Close, but I create the array using unsigned int's.
#define MAPSIZE 10
uint bitMap[MAPSIZE]; // 10 row x 16 column array of bits.
which allows up to 160 user defined keys. You can define smaller keypads/keyboards as needed. I then scan only the user defined keys and store open/closed key status as single bits in the bitMap. This allows some efficiencies in scanning the bitMap. In other words, because each row is an int I can see if any keys were pressed on that row by checking thus:
if (bitMap[n] {...} where n is any value between 0 and MAPSIZE.
The previous code I passed around was pretty basic and the three guys had to write some things that I really want to include in the library. I've got most of that done but the last thing I want to add before beginning testing is an easy way to convert the list of KeyCodes into the characters defined by the user. Then I get to start debugging all my bugging (programming.)