There's really no need for dummy objects. You can get away with just using variables.
+>system compare global value global.value("view") = "ahead"
->player compare .angle = 0
-->system set scroll x to lerp(scroll.x, player.x+offset, 1-0.5^timedelta)
->player compare .angle = 180
-->system set scroll x to lerp(scroll.x, player.x-offset, 1-0.5^timedelta)
+>system compare global value global.value("view") = "center"
->system set scroll x to lerp(scroll.x, player.x, 1-0.5^timedelta)
For sideview, topdown would add angles, y axis etc.
Thats good code, it feels a little too mechanical for my tastes though - even after tweaking the values, maybe a little too complicated to get the little "nuances" I get from having a dummy object too. Like how the scroll speed increases a bit when you change directions, to make up for not starting at a centered view, also the little extra push the camera gets when your character runs into a wall.
Its kinda hard to keep it consistent too - if my characters run speed ever increases (dashing) - he starts "catching up" to the camera. It's wayyyy easier to implement subtle changes with the camera object I think. It feels more "alive" too in my opinion..
Though your method definitely displays a lot more technical skill than mine lol.
This is the version that Lucid worked up for me for those who don't have or don't want to use magicam. Or just like math lol. [Thank you to lucid]
Look ahead example by lucid