The "right" way of building any list-like component is to extend the existing List component.
That is referenced in this documentation page:
You can find it under /libs/foundation/components/lists
To create, for example, a 'News List' component, just create a new component under your /apps/myproject/components, setting 'foundation/components/list' as sling:resourceSuperType ans add your custom script to display each news item. see also 
That way you canprovide more renderers to be used around your site(s)
Hope this helps,
Yeah, that's what I was thinking.
Am I correct to create a custom "article" component to store each news article, or is there a way to create articles as content pages and have the list parse their parsys to generate the summary?
The best way to manage news articles is to create them as blog posts. Each article is a blog post page.
I've played around with doing it that way, but I haven't found a good way to display article summaries on the main (non-blog) page. I've tried to include the existing EntryList and Archive blog components, but they don't seem to work at all on non-blog pages, and there's no design configuration available. Perhaps the right way to display the blog summaries on the main page is to consume my own blog's Atom feed?
Edit: I have accomplished the desired functionality by extending the lib/collab/blog/listentry component and customizing entrylist.jsp and listitem_blog.jsp. I then dropped the new component into the parsys of the main page, and it displays blog entries exactly as I want it to. The next trick will be improving the listitem_blog.jsp script to automatically truncate entries, instead of requiring the author to include 'read more' components into the entries.