Figured it out! I have to use autoAlpha instead of opacity. Can anyone tell me why though? What exactly is the difference between the two?
const rippleTl = new TimelineMax({repeat:-1});
TweenMax.set(".ripple", {autoAlpha:0});
rippleTl
.fromTo("#centerCircle", 1, {scale:5, transformOrigin: origin}, {scale: 0, transformOrigin: origin, ease: Circ.easeOut})
.staggerTo(".ripple", 1.5, {scale: 5, autoAlpha: .8, transformOrigin: origin}, .4, "-=.3")
.staggerTo(".ripple", 1, {opacity: 0, transformOrigin: origin}, .6, "-=1.5");