Keep @johnwasser's 'mask' in memory so you always know what is currently "out there" in the shift register.
You should break the activity into separate functions that do the following -
- Set a LED on or off by its position number
- Update the shift register
For blink, you would use something like BlinkWithoutDelay sketch, except use 1 and 2 above in sequence to access the appropriate LED.