I solved this for my WIP game by using easeTween, Array of UID's. It's a bit complicated and until I finish the game I'm a bit reluctant to share capx :)
When each instance is created I assign it to the corresponding Column ( I use floor(sprite.X / sprite.Width) to get 0-10 for 10 columns for example ) and store the UID's for each in a 2D array (GameBoard). When you remove an instance it's deleted from the array (set value to 0)
To drop them I just add them and drop them by using easeTween(relative) setting Target X to (GameBoard.Height - ColumnCount) * Sprite.Height ( (10 - 2 )*80) . Setting easeTween with an easeBounceOut makes them look like physics objects too.
When you remove a assets I call a function UpdatePositions which just run's through all the populated GameBoards UID's and counts how many blank spots are below. Repeat GameBoard.Height - Sprite.GameBoardY (repeats down 10-8) and then if Array's Spot is 0 add 1 to MoveAmount else do nothing.
Then at the end it just move the Sprite it was testing by MoveAmount * Sprite.Height using easeTween again.
Maybe if I get some time I can produce a stripped down capx to show.