First of all, if you want your sprite not to change its size when using Scale actions it is easier to use CCScaleTo.
And to answer you question : This happens, because with each touch you add an action to your sprite, which scales it up. If you do it fast enough, you add so many of these actions that you get these “unexpected” results.
Consider this example :
125ms 125ms 125ms 125ms
Time : -------|-------|-------|-------
FirstA : scale++ scale--
SecondA : scale++ scale--
So you started scaling up, when your first action was still scaling down, so you get the “infinite” scaling.
Solution : It seems that you want to have only one scale action running on your sprite at a time. This can be achieved in two ways, by using a (CC)ActionManager.
If you want to check if a specific action is running on a target :
CCAction getActionByTag (unsigned int tag, CCObject pTarget);
If you want to check if any actions at all are running on a target :
unsigned int numberOfRunningActionsInTarget (CCObject *pTarget);