Eventually I figured out how to achieve this with ui-router and $stateParams instead of the array.
I use a run function which listens for state changes use $rootScope.$on('stateChangeStart') and if the toState name is my dynamic state then I test the from and to steps and see if they are valid based on a routing table I have in a service. If the steps are invalid for some reason then I clear data and redirect to step one of the form.
A part of this was handling refreshes, in order to test this check if the fromState.url = "^" and set a rootScope variable. If your variable doesn't exist and fromstate is "^" then you should redirect. This prevents refreshing breaking the implementation and also infinite refresh loops