Use JMS exclusion policy.
Example using annotations on category entity, where you don't want to include children and product related entities to be included:
use ...
    JMS\SerializerBundle\Annotation\ExclusionPolicy,
    JMS\SerializerBundle\Annotation\Exclude,
    ...;
/**
 * ...
 * @ExclusionPolicy("none")
 */
class Category
{
   /**
    * ...
    * @Exclude
    */
   private $children;
   /**
    * ...
    * @Exclude
    */
   private $products;
}
Look at the JMSSerializer docs for more information.
EDIT:
For example you could use partial keyword to select only data that you need. Although I could not, for the life of me, 
disable the loading of the full related entities (two levels down) if I pass entity object to the serializer (even when disabling load in DoctrineProxyHandler), 
but if I use an array, than it doesn't use doctrine lazy loading though proxies (as expected ofc).
Example using your example entities:
$dql = "SELECT t, s, partial b.{id}, partial ss.{id}
        FROM Acme\AppBundle\Entity\Task t
        JOIN t.story s
        JOIN s.board b
        JOIN b.stories ss"
$q = $this->_em-createQuery($dql);
$result = $q->getArrayResult();
This way you would get something like:
[
{
    id: 33,
    title: "My Task",
    story: [
    {
        id: 554,
        board: [
        {
            id: 14,
            stories: [
            {
                id: 554
            },
            {
                id: 3424
            },
            {
                id: 3487
            }
            ]
        }
        ]
    }
    ]
}
]
P.S. I'm actually intrigued by this "problem". Anyway I'll see to come up with solution  to how to serialize entity object without using array result.