I'm not sure I like any of the first two options to fill the role of your sixth. All three have the potential to get you into serious trouble due to their weaknesses. For instance, take Relicanth. It's weak against Electric attacks and 4x weak against Grass moves. Milotic is weak against those same two types, although it doesn't have any 4x weaknesses. You see, since they're both Water Pokemon, they have similar weak points. That means you may have to go out of your way to keep from having those two left at the end. If Milotic and Relicanth came up as your last two Pokemon against a Pokemon with Grass or Electric attacks at the end of a match, you'd be in serious trouble. Because of that, you'd have to take precautions against leaving those two to finish - and it's not great when you have to intentionally use a Pokemon early just so you don't leave it at the end. That sort of hindrance can really create problems, and it can give an opponent just enough of an advantage to hand you a loss. Similar problems could emerge with Metagross (similar weaknesses to Aggron) and Sharpedo (again, similar types as Milotic)
Both of your other choices are Grass/Dark, which leaves them weak against Fire, Ice, Fighting, Poison, Flying and Bug (4x) attacks. However, you'll be strong against Water, Electric, Grass, Ghost, and Dark moves, and immune to Psychic attacks. Either can be a good Pokemon to bring up in the middle of the match to take advantage of its resistances. Your choice may not get many shots in, because your opponent could surprise you with an attack of a type you don't expect (and with so many weaknesses, that's quite possible), but you might be able to get some good moves before it goes down.
With Cacturne, you'll probably just want to hit your opponent hard and fast. Cacturne has great Attack and Special Attack, so it's probably best served as a heavy hitter rather than using supporting moves, although Spikes and Leech Seed can be decent if used at an opportune time. Another move worth considering might actually be Sandstorm, as it's beneficial to Flygon and Aggron as well (because they aren't damaged by it). Toxic can be fun as well. As for regular attacks, Cacturne doesn't get many good ones naturally, so you might want to turn to TMs, breeding and/or Move Tutors for those. Just make sure you get something that can actually do some damage.
Shiftry, on the other hand, trades some of its offensive powers for more HP and Speed. It's the kind of Pokemon that could last a fair amount of time, especially with moves like Double Team, which it can learn via TM. (Cacturne can learn Double Team as well, but it might not last long enough to maximize its evasion.) It can do some early damage with Fake Out, which its middle stage Nuzleaf learns at level 19, and Explosion (which can be taught to any of its forms by a Move Tutor) can be a surprisingly powerful last strike. Toxic can be a good move for longer battles, which Shiftry's high HP predisposes it to. You could even try something like Rest with a Shiftry that had an Early Bird trait in order to take full advantage of Toxic's effects. You have many options on how you could handle Shiftry in regards to movesets and traits. Either direct attacks or slow, continuous damage-dealing moves could work well.
Hopefully someone a bit more experienced with these Pokemon and effective movesets can give you better advice. But I hope this helps in some manner.