The goal is to combine the faces, instead of having them overlap. That overlap of faces actually is very chaotic and difficult to combine if I make the object that I'm arraying (a spherical fragment) smaller (this gives it a nicer, smoother look). It seems as though there should be a simple solution to this, but I have no idea what this solution is. After all, array merging seems to affect the whole fragment instead of just the top faces. I've tried booleaning, grabbing (changes dimensions while it is arrayed), changing it into a curve (seems to mess everything up), and re-sizing it. The curve that it follows is directly below it and follows the wall's pattern. Anyway, maybe someone knows another option...?
As an alternative you can use curves. One that describes the profile, and is used as bevel object on another curve that becomes the rooftop.
There will be no overlapping vertices if the control points of the curve are to one side of the origin.
The smoothness of the object will be determined by the Resolution of the curve.
Finally, it's important to know the origin of these two items as well as the length of the beveling curve (not the one that is being beveled). The beveled curve will cause an overlap if its not at the beginning (front end) of where the bevel originates.
Delete the curve parts on the sides and keep the middle section (that is perpendicular to the "columns") then do bridge edge loops. You will be able to control the number of cuts and the curvature (smoothness)
Here's an example on how to connect two cylinder segments that have the same number of vertices, select the end edges and use Bridge Edge Loops, and adjust number of cut and smoothness.
Overlapping answer with @cetagon .. (credit him).. although not quite sure if this is exactly what you're looking for.
Using Bridge Edge Loops, as described, borrowing an appropriate profile from elsewhere in your model, and filling the profile so you can use the 'Interpolate Surfaces' option of the operator.
My stuff on layer 10.