I'm fascinated with the idea of making a nice shop, so I'm pulling up this thread from three years ago. I came up with a shop design myself, and
although it may be complicated, and the explanation long, I think it will please the player best.
In the first and fourth post here Sucinum did some good thinking work. His 4th idea was an excellent one, because it improves upon simple item buying in the following ways:
1) you can pick up an object to look at it but you cannot steal it.
2) all objects in same "room"
Some improvements that I want to make:
3) purchased items can later be refunded somehow. (or perhaps exchanged for credit to buy other items)
4) no need to scroll through list of items every visit -- or in other words, items found in location rather than sequence, like a real shop.
Now, Paul's idea for #3 and #4 was to use some sort of non-standard item/coin
counter. A room would have items available but not allow you to leave if more items were out of place than coins paid. The counter would be triggered by taking and returning items and by inserting coins. He eventually succeeded to make a DSA that could count up to 8.
I like the counter idea, but I'm not so hot with DSA's. So instead, I came up with a non-DSA, stack-like counter, which uses teleporters, pressure pads, and arrow shooters. This is how it works:

There is a line of teleporters which, when activated, teleport to the next in line, with the last teleporting off to an empty square. This line should be as long as there are items in the shop. Each teleporter square has two pressure pads, in this order:
-an object removed clears the current square (the teleporter is turned off)
-an object added clears and removed sets the previous square. (whose teleporter points to the current square) The first square doesn't need this pad, of course.
A shooter is aimed to shoot an arrow onto the first square. The squares initially have all the teleporters on except the last, and no objects yet. When you take an object from a shop alcove you could say you have put it in your "shopping cart," and you "set" the shooter. This adds an arrow to the last square, (or the last square without an arrow) and clears the 2nd to last teleporter. (or the teleporter before the added arrow) When you replace an object in the shop or pay a coin for the item instead, the last teleporter is "set," removing an arrow and setting off a chain reaction that moves all the arrows (in this case, there aren't any more) forward one square. Now whenever there aren't any arrows you should be allowed to leave the shop, and not otherwise, so another pad can be placed on the last square to close the door while an arrow is on it.
For simplification, I said that the line must be as long as there are shop items. Actually, the line must be twice that length, so that a person who puts back a purchased item won't break the mechanism and be able to take all the items. An arrow must start on each of these "extra" squares, and the pad to close the door should be right before the first arrow.
Also, if you are going to allow the player to pay before picking up any items, you will have to have yet another square in the line for each coin they could pay more than the number of items. My suggestion is to add pads as necessary to close the coin slot while the door is open. (I did this with two pads and an AND/OR on the coin slot, but there is probably a better way.)
Problems with this mechanism, and their solutions:
-adding and removing items quickly with 3 clicks allows theft: I made the alcoves close and reopen 2 frames later each time you remove their items. Kinda ugly solution and adds complexity, but it's necessary.
-complex and takes lots of time to make a big shop: This is sort of inherent. I have no solution.
-maybe more I haven't discovered.
Benefits:
-most user-friendly and self-explanatory, IMHO
-extendable. I've already thought of several things I will add on to it. Shopkeeper, more expensive items, statements of balance, full refunds...
-same counter idea could be used for different purposes, as mentioned in above posts
If anyone wants to try it out, I can make and send them a demo. I'm planning on incorporating it in my next dungeon also.
P.S.: Can Paul make a counter bigger than 4-bit now? Maybe I should just learn to use DSA's, huh?