This problem has a source in Zend_Controller_Router_Route_Module::match() method. Match() body trims a path to clear trailing and ending self::URI_DELIMITER:

and when the uri is like this: http://example.com/controller/action/… the result is: controller/action/param1/some_value/param2
Then "for" loop determines if some value exist after param2 and because of trim it doesn't exist so the null value is assigned to param2
Unfortunately Zend_Controller_Request_Abstract::setParam() use unset for those params (whith null values):